var map_with_routes, route, routes;

describe("Drawing a route", function () {
    beforeEach(function () {
        map_with_routes = map_with_routes || new GMaps({
            el: '#map-with-routes',
            lat: -12.0433,
            lng: -77.0283,
            zoom: 12
        });
    });

    it("should add a line in the current map", function () {
        var route_flag;

        runs(function () {
            route_flag = false;

            map_with_routes.drawRoute({
                origin: [-12.044012922866312, -77.02470665341184],
                destination: [-12.090814532191756, -77.02271108990476],
                travelMode: 'driving',
                strokeColor: '#131540',
                strokeOpacity: 0.6,
                strokeWeight: 6,
                callback: function () {
                    route_flag = true;
                }
            });
        });

        waitsFor(function () {
            return route_flag;
        }, "The drawn route should create a line in the current map", 500);

        runs(function () {
            expect(map_with_routes.polylines.length).toEqual(1);
            expect(map_with_routes.polylines[0].get('strokeColor')).toEqual('#131540');
            expect(map_with_routes.polylines[0].get('strokeOpacity')).toEqual(0.6);
            expect(map_with_routes.polylines[0].getMap()).toEqual(map_with_routes.map);
        });
    });
});

describe("Getting routes", function () {
    beforeEach(function () {
        map_with_routes = map_with_routes || new GMaps({
            el: '#map-with-routes',
            lat: -12.0433,
            lng: -77.0283,
            zoom: 12
        });
    });

    it("should return an array of routes", function () {
        var routes_flag;

        runs(function () {
            routes_flag = false;

            map_with_routes.getRoutes({
                origin: [-12.0440, -77.0247],
                destination: [-12.0908, -77.0227],
                callback: function (r) {
                    routes = r;

                    routes_flag = true;
                }
            });
        });

        waitsFor(function () {
            return routes_flag;
        }, "#getRoutes should return the found routes as an argument", 500);

        runs(function () {
            expect(routes).toBeDefined();
            expect(map_with_routes.routes).toEqual(routes);

            if (routes.length > 0) {
                expect(routes[0].legs[0].distance).toBeDefined();
                expect(routes[0].legs[0].duration).toBeDefined();
            }
        });
    });
});